﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void allocateSpacePointer(int** temp)
{
	int* arr = malloc(sizeof(int) * 10);
	for (int i = 0; i < 10; ++i)
	{
		arr[i] = i + 1;
	}
	//1.指针间接赋值，通过二级指针temp修改一级指针pArray的地址，达到修改pArray指向的值的目的；
	*temp = arr;
}
void printAarry(int* arr, int len)
{
	for (int i = 0; i < len; ++i)
	{
		printf("2.输出数组arr的元素，arr[%d]：%d\n", i, arr[i]);//arr[0]：1，...，arr[9]：10
	}
}
#if 0
void freeSpace(void* arr)
{
	if (arr = NULL)
	{
		return;
	}
	free(arr);
	arr = NULL;
}
#else
void freeSpace(int** arr)
{
	if (arr == NULL)
	{
		return;
	}
	if (*arr != NULL)
	{
		free(*arr);
		*arr = NULL;
		arr = NULL;
	}
}
#endif
void testSecondPointerOutput()
{
	int* pArray = NULL;
	allocateSpacePointer(&pArray);
	printAarry(pArray, 10);
#if 0
	freeSpace(pArray);
	pArray = NULL;
#endif
	freeSpace(&pArray);
	if (pArray == NULL)
	{
		printf("3.一级指针pArray被释放，接着被置空！\n");
	}
}

//main198：二级指针做形参输出特性
int main198()
{
	testSecondPointerOutput();

	system("pause");
	return EXIT_SUCCESS;
}